package cn.tedu.oop;

/**
 * @Author 金帮嘉诚
 * @Date 2021-06-11 周五 11:30
 */
/*本类用于抽象类中的成员测试*/
public class AbstractDemo3 {
    public static void main(String[] args) {
        Fruit a = new Banana();

        a.clean();
        a.grow();
        a.clean2();
        System.out.println("a.b = " + a.b);
        System.out.println("a.name = " + a.name);
    }
}

abstract class Fruit {
    /*1.抽象类中可以定义 成员变量 吗？--可以！！！*/
    int a;
    /*2.抽象类中可以定义 成员常量 吗？--可以！！！*/
    final int b = 10;
    final String name = "Little Yellow Man";

    /*3.抽象类中可以定义普通方法吗？--可以！！！
     * 抽象类中可以都是普通方法吗？--也可以！！！*/
    /*4.如果一个类中都是普通方法，那它为啥还要被修饰成抽象类呢？
     * 因为抽象类不可以被实例化，所以如果不想让外界创建本类的对象，
     * 那么我们就可以把普通类声明成抽象类*/
    //4.
    public void clean() {
        System.out.println("Fruit Clean 水果还是要洗洗再吃哒~");
    }

    /*5.抽象类中可以定义抽象方法吗？--可以！！！
     * 可以都是抽象方法吗--可以！！！*/
    /*6.如果类中添加了抽象方法，那么这个类必须被声明成抽象类*/
    public abstract void grow();

    public abstract void clean2();

}

class Banana extends Fruit {

    @Override
    public void grow() {
        System.out.println("Banana Grow 一串香蕉老沉了~");
    }

    @Override
    public void clean2() {
        System.out.println("Banana clean2 香蕉不用洗，香蕉扒皮就能吃");
    }
}

